package com.edu.service.impl;

import com.edu.dao.MenuMapper;
import com.edu.entity.Menu;
import com.edu.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class MenuServiceImpl implements MenuService {
    @Autowired
    private MenuMapper menuMapper;
    //方法一：获取用户菜单
    @Override
    public List<Menu> getMenusByUser(Integer roleId) {
        //{1}调用 menuMapper 查询菜单的数据。
        List<Menu> menus = menuMapper.getMenusByUser(roleId);
        //{2}从 menus 中把一级菜单抽取出来。
        List<Menu> oneLevel = findOneMenu(menus, 0); //一级菜单父级固定为0
        //{3}迭代每一个一级菜单, 把子菜单设置进去。
        oneLevel.forEach((M)->{
            findSubMenu(menus,M);
        });
        return oneLevel;
    }

    //方法二：获取一级菜单
    private List<Menu> findOneMenu(List<Menu> list,Integer parId){
        //1.创建一个容器来存入一级菜单
        List<Menu> oneLevel = new ArrayList<>();
        //2.迭代list找到所有的一级菜单
        list.forEach((M)->{
            Integer _parId = M.getParId();  //获取M的父级ID
            if ( parId.equals(_parId)){
                oneLevel.add(M);            //确认是一级加入oneLevel
                System.out.println("[一级菜单]"+M);
            }
        });
        //3.把一级菜单从总列表中移除
        list.removeAll(oneLevel);
        return oneLevel;
    }

    //方法三：获取二级菜单
    private void findSubMenu(List<Menu> list, Menu menu) {
        //1.获取当前菜单的ID
        Integer parId = menu.getId();
        //2.迭代菜单列表list
        list.forEach((M)->{
            //3.获取M父级菜单Id
            Integer _parId = M.getParId();
            if(_parId.equals(parId)){
                menu.addMenu(M);
                System.out.println("  [子级菜单]"+M);
                findSubMenu(list, M);
            }
        });
    }
}
